import Vue from 'vue'
// 引入axios
import axios from 'axios'
// 引入路由
import router from '@/router'

// 引入大数字json-bigint
import JSONBig from 'json-bigint'
// 配置请求根地址
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0'

// 配置token
// 在请求拦截器里面配置token，具体配置根据文档，每次请求都会经过，一劳永逸
// 在输出信息里会包含config>headers>Authorization
axios.interceptors.request.use(config => {
  // console.log(config)
  // 判断如果有token
  let userinfo = window.sessionStorage.getItem('userinfo')
  if (userinfo) {
    let token = JSON.parse(userinfo).token
    // 给axios请求头设置token（根据文档）
    config.headers.Authorization = 'Bearer ' + token
  }
  return config
}, function (error) {
  return Promise.reject(error)
})
// axios配置响应拦截器
axios.interceptors.response.use(function (response) {
  // response：服务器端返回的数据信息，与 then(result=>{}) 的result一致
  return response
}, function (error) {
  // 判断响应状态码如果登录401，就强制登录
  // error对象
  // error.response.status======401
  // console.dir(error)
  if (error.response.status === 401) {
    // 强制登录
    // 组件对象：.js中是router
    router.push('/login')
  }
  return Promise.reject(error)
})
// 大数字转换
axios.defaults.transformResponse = function (data) {
  // data就是回来的数据
  // console.log(typeof data) // string
  // 服务器端返回的数据信息是字符串，有两种格式：
  // 1. '{x:y,x:y}'  非空的字符串
  // 2. ''  空字符串
  if (data) {
    return JSONBig.parse(data)
  } else {
    return data
  }
}

// 把axios通过原型对象配置给vue成员，名称为$http(自定义),以后其他组件就可以通过$http的方法获得axios对象
Vue.prototype.$http = axios
